home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; (c) Copyright 1982 Massachusetts Institute of Technology ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- (macsyma-module zero)
-
- (declare-top (SPECIAL
- ;S VAR V1 V R1 R2 ;; added declares
- #-cl EXP ;I don't think exp is necessary--wfs
- $NUMER $LISTCONSTVARS VARLIST GENVAR)
- (*LEXPR $RAT))
-
- (DEFMFUN $ZEROEQUIV (EXP VAR)
- (declare (special var ))
- (PROG (R S V VARLIST GENVAR)
- (declare (special S V))
- (SETQ EXP (SPECREPCHECK EXP))
- (SETQ R (LET ($LISTCONSTVARS) ($LISTOFVARS EXP)))
- (IF (AND (CDR R) (OR (CDDR R) (NOT (ALIKE1 (CADR R) VAR))))
- (RETURN '$DONTKNOW))
- (SETQ EXP ($EXPONENTIALIZE EXP))
- (SETQ R (SDIFF EXP VAR))
- (IF (ISINOP R '%DERIVATIVE) (RETURN '$DONTKNOW))
- ($RAT R)
- (SETQ R ($RAT EXP))
- (SETQ S (CAR R))
- (SETQ V (RATNUMERATOR (CDR R)))
- (RETURN (ZEROEQUIV1 V))))
-
- (DEFUN ZEROEQUIV1 (V)
- (declare (special var v s))
- (PROG (V1 V2 COEFF DEG)
- (declare (special V1 V2))
- (IF (ATOM V) (RETURN (EQUAL V 0)))
- COEFFLOOP (IF (NULL (CDR V)) (RETURN T))
- (SETQ DEG (CADR V))
- (IF (EQUAL DEG 0) (RETURN (ZEROEQUIV1 (CADDR V))))
- (SETQ COEFF (CADDR V))
- (WHEN (ZEROEQUIV1 COEFF)
- (SETQ V (CONS (CAR V) (CDDDR V)))
- (GO COEFFLOOP))
- (SETQ V1 ($RAT (SDIFF (RATDISREP (CONS S (CONS V (CADDR V))))
- VAR)))
- (SETQ V2 (CADR ($RAT (RATDISREP V1))))
- (IF (EQUAL (PDEGREE V2 (CAR V)) (CADR V))
- (RETURN (ZEROEQUIV2 V)))
- (IF (LESSP (PDEGREE V2 (CAR V)) (CADR V))
- (RETURN (IF (ZEROEQUIV1 V2) (ZEROEQUIV2 V))))
- (RETURN '$DONTKNOW)))
-
- (DEFUN ZEROEQUIV2 (V)
- (declare (special var v s))
- (PROG (R R1 R2)
- (declare (special r1 r2))
- (SETQ R (SIN (TIMES 0.001 (RANDOM 1000.))))
- (SETQ V (MAXIMA-SUBSTITUTE R VAR (RATDISREP (CONS S (CONS V 1)))))
- (SETQ V (MEVAL '(($EV) V $NUMER)))
- (COND ((AND (NUMBERP V) (LESSP (ABS V) (TIMES R 0.01)))
- (RETURN T))
- ((NUMBERP V) (RETURN NIL)))
- (IF (AND (FREE V '$%I) (NOT (ISINOP V '%LOG)))
- (RETURN '$DONTKNOW))
- (SETQ R1 ($REALPART V))
- (SETQ R1 (MEVAL '(($EV) R1 $NUMER)))
- (IF (NOT (NUMBERP R1)) (RETURN '$DONTKNOW))
- (SETQ R2 ($IMAGPART V))
- (SETQ R2 (MEVAL '(($EV) R2 $NUMER)))
- (IF (NOT (NUMBERP R2)) (RETURN '$DONTKNOW))
- (COND ((AND (LESSP (ABS R1) (TIMES R 0.01))
- (LESSP (ABS R2) (TIMES R 0.01)))
- (RETURN T))
- (T (RETURN NIL)))))
-
-
-
-
-
-